package com.example.interceptmybatis.handler;

import lombok.extern.slf4j.Slf4j;

import java.util.function.Function;

/**
 * @ClassName UserPorxy
 * @Description TODO
 * @Author 郭敖
 * @Date 2024年07月29日 22:15
 * @Version 1.0
 */
@Slf4j
public class UserProxy<T> {

    private T data;

    public UserProxy(T data) {
        this.data = data;
    }

    public UserProxy<T> printData(){
      log.info("打印数据：{}",data);
      return this;
    }

    public UserProxy<T> updateData(T updateData){
        this.data = updateData;
        return this;
    }

    /**
     * 自定义数据处理方法
     * @author 郭敖
     * @date 22:25 2024/7/29
     * @param function
     * @return com.example.interceptmybatis.handler.UserProxy<T>
     */
    public UserProxy<T> customerHandle(Function<T,T> function){
        this.data = function.apply(this.data);
        return this;
    }

    /**
     * 获取数据
     * @author 郭敖
     * @date 22:26 2024/7/29
     * @return T
     */
    public T getData(){
        return this.data;
    }

    /**
     * 更换数据类型可用于bo转vo
     * @author 郭敖
     * @date 22:37 2024/7/29
     * @param function
     * @return com.example.interceptmybatis.handler.UserProxy<R>
     */
    public <R> UserProxy<R> changType(Function<T,R> function){
        return new UserProxy<>(function.apply(this.data));
    }
}
